package in.lib.adapter; import in.lib.Constants; import in.lib.adapter.base.RobinAdapter; import in.lib.handler.UserFollowResponseHandler; import in.lib.handler.UserUnFollowResponseHandler; import in.lib.helper.AnimationHelper; import in.lib.helper.ThemeHelper; import in.lib.holder.UserHolder; import in.lib.manager.APIManager; import in.lib.manager.SettingsManager; import in.lib.view.AvatarView; import in.lib.view.LinkifiedTextView; import in.model.User; import in.rob.client.R; import in.rob.client.SettingsActivity; import java.util.List; import lombok.Getter; import lombok.Setter; import net.callumtaylor.asynchttp.response.JsonResponseHandler; import android.content.Context; import android.content.Intent; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.Button; import android.widget.Toast; public class UserAdapter extends RobinAdapter implements OnClickListener, OnLongClickListener { @Getter private final Context context; @Getter private final LayoutInflater layoutInflater; @Setter @Getter private int userLayoutResource; @Getter private final int[] buttonRes; public UserAdapter(Context context, List<User> items) { super(context, items, Order.DESC); this.context = context; this.layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.userLayoutResource = R.layout.user_list_item; this.setItems(items); int redButton = ThemeHelper.getDrawableResource(context, R.attr.rbn_red_button); int greyButton = ThemeHelper.getDrawableResource(context, R.attr.rbn_grey_button); buttonRes = new int[]{redButton, greyButton}; } @Override public View getView(int position, View convertView, ViewGroup parent) { super.getView(position, convertView, parent); User user = (User)getItem(position); UserHolder currentHolder; if (convertView == null) { convertView = layoutInflater.inflate(userLayoutResource, parent, false); currentHolder = new UserHolder(convertView); convertView.setTag(currentHolder); currentHolder.followButton.setOnClickListener(this); currentHolder.muteButton.setOnClickListener(this); } else { currentHolder = (UserHolder)convertView.getTag(); } // populate the view currentHolder.populate(user, this); currentHolder.avatar.setTag(position); currentHolder.followButton.setTag(position); currentHolder.muteButton.setTag(position); /** * Set the animation if it hasn't been played */ if (getLastPositionAnimated() < position && (isAnimationsEnabled() && SettingsManager.isListAnimationEnabled())) { AnimationHelper.slideUp(convertView); } if (position > getLastPositionAnimated()) { setLastPositionAnimated(position); } return convertView; } @Override public boolean onItemLongClick(AdapterView arg0, View v, int position, long arg3) { // weird conflicts with LinkifiedTextView on Jelly Bean if (v instanceof LinkifiedTextView) { return false; } User user = (User)getItem(position - getListView().getHeaderViewsCount()); ((AvatarView)v.findViewById(R.id.avatar)).triggerLongPress(user); return true; } @Override public void onClick(final View v) { final User user = (User)getItem((Integer)v.getTag()); if (v.getId() == R.id.follow_button) { if (user.isYou()) { Intent settings = new Intent(getContext(), SettingsActivity.class); settings.putExtra(Constants.EXTRA_START_PAGE, 0); context.startActivity(settings); return; } if (user.getYouFollow()) { APIManager.getInstance().unfollowUser(user.getId(), new UserUnFollowResponseHandler() { @Override public void onFinish(boolean failed) { super.onFinish(failed); if (failed) { Context c = v.getContext(); user.setYouFollow(true); ((Button)v).setText(R.string.unfollow); ((Button)v).setBackgroundResource(buttonRes[1]); if (c != null) { Toast.makeText(getContext(), context.getString(R.string.unfollow_failed) + " @" + user.getMentionName(), Toast.LENGTH_SHORT).show(); } } } }); } else { APIManager.getInstance().followUser(user.getId(), new UserFollowResponseHandler() { @Override public void onFinish(boolean failed) { super.onFinish(failed); if (failed) { Context c = v.getContext(); user.setYouFollow(false); ((Button)v).setText(R.string.follow); ((Button)v).setBackgroundResource(buttonRes[0]); if (c != null) { String message = c.getString(R.string.follow_failed) + " @" + user.getMentionName(); if (getConnectionInfo().responseCode == 507) { message = c.getString(R.string.too_many_follow); } Toast.makeText(c, message, Toast.LENGTH_LONG).show(); } } } }); } user.setYouFollow(!user.getYouFollow()); ((Button)v).setText(user.getYouFollow() ? R.string.unfollow : R.string.follow); v.setBackgroundResource(user.getYouFollow() ? buttonRes[1] : buttonRes[0]); } else if (v.getId() == R.id.mute_button) { if (user.isMuted()) { APIManager.getInstance().unMuteUser(user.getId(), new JsonResponseHandler() { @Override public void onSuccess(){} @Override public void onFinish(boolean failed) { if (failed) { Context c = v.getContext(); user.setMuted(true); ((Button)v).setText(R.string.unmute); ((Button)v).setBackgroundResource(buttonRes[1]); if (c != null) { Toast.makeText(c, c.getString(R.string.unmute_failed) + " @" + user.getMentionName(), Toast.LENGTH_SHORT).show(); } } } }); } else { APIManager.getInstance().muteUser(user.getId(), new JsonResponseHandler() { @Override public void onSuccess(){} @Override public void onFinish(boolean failed) { if (failed) { Context c = v.getContext(); user.setMuted(false); ((Button)v).setText(R.string.mute); ((Button)v).setBackgroundResource(buttonRes[0]); if (c != null) { Toast.makeText(c, c.getString(R.string.mute_failed) + " @" + user.getMentionName(), Toast.LENGTH_SHORT).show(); } } } }); } user.setMuted(!user.isMuted()); ((Button)v).setText(user.isMuted() ? R.string.unmute : R.string.mute); v.setBackgroundResource(user.isMuted() ? buttonRes[1] : buttonRes[0]); } } @Override public boolean onLongClick(View v) { return false; } }